import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.List;
import java.util.ArrayList;
/**
 * Essa classe representa um dos obstáculos,que é o cachorro.Diferentemente do Obstáculo Barricada o cachorro enxerga e possui movimentos.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Cachorro extends Obstaculo implements Runnable,movedor,visao
{
    GreenfootSound latido = new GreenfootSound("latido.mp3");
    private boolean comOsso = false;
    
    /**
     * Act - do whatever the Cachorro wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    int eixoX, eixoY;
    public Boolean checaPosicaoLadrao(int x, int y)
    {       
        World mundo = getWorld();
        List checagem = mundo.getObjectsAt(x, y, Ladrao.class);
        if(checagem.isEmpty()){
            return false;
        }else{
            return true;   
        }
    }
    
    
    public void act(){
        double i;
        double x = 300000000;
            if(!checaComOsso()){
                if(encontrouOsso()){
                    pegarOsso();
                    comOsso = true;
                }else{ 
                    if(enxergarAoRedor() == true){
                        for(i = 0; i < x;i++){
                            
                        }
                                                
                        latido.play();
                        mover();
                    }
                    
                }
            }
            
         atualizarX();
        atualizarY();
    }
    
    
    
    public boolean checaComOsso(){
        if(comOsso){
            return true;
        }
        return false;    
    }


     public boolean enxergarAoRedor(){
         List vizinhos = procurarLadraoNaVizinhanca();
         
         if(vizinhos == null || vizinhos.isEmpty()){
           return false;//nao viu o ladrao
         }else{
           return true;
         }
     }
    
    public List procurarLadraoNaVizinhanca(){
        return getNeighbours(raioDeVisao, true,Ladrao.class);
    }
    
    public void mover(){
        ataqueDoCachorro();
    }
  
    public void ataqueDoCachorro()
    {
            World mundo = getWorld();
           
            Ladrao ladrao = new Ladrao();
            int x, y;
                        
                        do
                        {
                            x = Greenfoot.getRandomNumber(mundo.getWidth());
                            y = Greenfoot.getRandomNumber(mundo.getHeight());
                        }while(checaPosicaoLadrao(x, y) == false);
                        
                        if(getX() > x)
                        {
                            eixoX = getX()-1;
                        }else if(getX() < x)
                        {
                            eixoX = getX()+1;
                        }
                        
                        if(getY() > y)
                        {
                            eixoY = getY()-1;
                        }else if(getY() < y)
                        {
                            eixoY = getY()+1;
                        }
                 
         run();
    }    
    
    @Override
    public void run()
    {
        //testes pra fazer a imagem do cachorro virar de lado
            if(getX()> eixoX){
                setImage("dog_mini.png");
            }else{
                setImage("dog.png");
            }
            setLocation(eixoX, eixoY);
        
    }
    
    public boolean encontrouOsso(){
       Actor osso = getOneObjectAtOffset(0, 0, Osso.class);
            if(osso != null) {
                return true;
            }
            else {
                return false;
            }
    }
 
    public void pegarOsso(){
         Actor osso = getOneObjectAtOffset(0, 0, Osso.class);
            if(osso != null) {
              getWorld().removeObject(osso);
              setImage("dog_comendo_osso.png");
            }
    
    }
}